from venv import logger

from django_redis import get_redis_connection

from rest_framework import serializers


class ImageCodeCheckSerializer(serializers.Serializer):
    image_code_id = serializers.UUIDField()
    text = serializers.CharField(min_length=4, max_length=4)
    
    def validate(self, attrs):
        """
        校验
        :param attrs:
        :return:
        """
        image_code_id = attrs['image_code_id']
        text = attrs['text']
        
        redis_conn = get_redis_connection('verify_codes')
        real_image_code_text = redis_conn.get('img_%s' % image_code_id)
        if not real_image_code_text:
            raise serializers.ValidationError("图片验证码无效")
        
        try:
            redis_conn.delete('img_%s' % image_code_id)
        except Exception as e:
            logger.error(e)
        
        real_image_code_text = real_image_code_text.decode()
        if real_image_code_text.lower() != text.lower():
            raise serializers.ValidationError("验证码输入错误")
        
        mobile = self.context['view'].kwargs.get('mobile')
        if mobile:
            send_flag = redis_conn.get('send_flag_%s' % mobile)
            if send_flag:
                raise serializers.ValidationError("请求次数过多")
        
        return attrs
    

